package com.fqgj.xjd.user.client;


import com.fqgj.common.api.Response;
import com.fqgj.xjd.user.client.enums.OperateTypeEnum;
import com.fqgj.xjd.user.client.request.*;
import com.fqgj.xjd.user.client.response.UserInfo;
import com.fqgj.xjd.user.client.response.UserResidentInfo;

import java.util.List;

/**
 * @ClassName:
 * @Description: 用户基本信息服务
 * @Author zhangxingyun
 * @Create 2017-07-21 09:37
 */
public interface UserInfoService {

    /**
     * 创建基本信息--用户基本信息
     * @param userBase
     * @return
     */
    Response<Boolean> addUserBase(UserBase userBase);

    /**
     *创建基本信息--联系方式
     * @param userContact
     * @return
     */
    Response<Boolean> addUserContact(UserContact userContact);

    /**
     *创建基本信息--居住信息
     * @param UserResident
     * @return
     */
    Response<Boolean> addUserResident(UserResident UserResident);

    /**
     *创建基本信息--工作信息
     * @param userWork
     * @return
     */
    Response<Boolean> addUserWork(UserWork userWork);

    /**
     *更新基本信息--用户基本信息
     * @param userBase
     * @return
     */
    Response<Boolean> updateUserBase(UserBase userBase);

    /**
     *更新基本信息--联系方式
     * @param userContact
     * @return
     */
    Response<Boolean> updateUserContact(UserContact userContact);

    /**
     *更新基本信息--居住信息
     * @param userResident
     * @return
     */
    Response<Boolean> updateUserResident(UserResident userResident);

    /**
     *更新基本信息--工作信息
     * @param userWork
     * @return
     */
    Response<Boolean> updateUserWork(UserWork userWork);

    /**
     * 根据userCode查询基本信息
     * @param userCode
     * @return
     */
    Response<UserBase> getUserBase(String userCode);

    /**
     * 获取用户基本信息
     * @param userCode
     * @return
     */
    Response<UserInfo> getUserInfoByUserCode(String userCode);

    /**
     * 记录用户访问次数
     * @param userPromotion
     * @return
     */
    Response<Boolean> addUserPromotion(UserPromotion userPromotion);



    Response<UserResidentInfo> getUSerResidentInfoByUserCode(String userCode);

    /**
     * 用户埋点
     * **/
    Response<Boolean> addRiskBuriedPointInfo(List<UserBuriedData> userBuriedData,String userCode);

    /**
     * 添加操作流水
     */
    Response<Boolean> addOperationFlow(String userCode, OperateTypeEnum operateTypeEnum);

    /**
     * 添加操作流水
     */
    Response<Boolean> addOperationFlowV2(OperationFlow operationFlow);

    /**
     * 查询操作流水
     */
    Response<Boolean> searchOperationFlow(String userCode, OperateTypeEnum operateTypeEnum);
}
